// 加载 koa 模块
const Koa = require('koa');
const koaStaticCache = require('koa-static-cache');
const KoaRouter = require('@koa/router');
const koaBody = require('koa-body');
const nunjucks = require('nunjucks');
const fs = require('fs');

let maxUserId = 2;
let users = [
    {id: 1, username: 'haizi'},
    {id: 2, username: 'zMouse'}
]


// 创建一个 koa（Application） 对象
const app = new Koa();


// 静态资源处理
app.use( koaStaticCache({
    // url 中的前缀
    prefix: '/public',
    // url 对应的静态资源存放目录
    dir: './public',
    // 启用 gzip 传输压缩
    gzip: true,
    // 监听静态资源文件变化
    dynamic: true
}) );

// 动态资源处理
const router = new KoaRouter();

// 路由函数注册
router.get('/', async (ctx, next) => {
    ctx.body = '首页';
});

router.get('/users', async (ctx, next) => {
    let templateFile = fs.readFileSync('./template/users.html').toString();
    ctx.body = nunjucks.renderString( templateFile, {users} );
});


// 添加用户的页面
router.get('/add-user', async (ctx, next) => {
    let templateFile = fs.readFileSync('./template/add-user.html').toString();
    ctx.body = nunjucks.renderString( templateFile );
} );


// 处理 post 提交的数据
router.post('/add-user', koaBody(), async (ctx, next) => {
    // 在 koaBody 中间件中，会把解析的正文数据，转成对象，存放在 ctx.request.body 属性中
    let {username} = ctx.request.body;

    users.push({
        id: ++maxUserId,
        username
    });

    ctx.body = '添加成功';
});

// 注册中间件
app.use( router.routes() );

// 监听
app.listen(8888, () => {
    console.log(`服务启动成功 http://localhost:8888`);
});
